/**
 * 项目管理相关常量定义
 */

import { TaskStatus, TaskPriority } from '../types/project';

/**
 * 任务状态选项配置
 */
export const TASK_STATUS_OPTIONS = [
  {
    value: TaskStatus.NOT_STARTED,
    label: '未开始',
    color: '#d9d9d9',
    bgColor: '#f5f5f5',
    icon: '⏸️'
  },
  {
    value: TaskStatus.IN_PROGRESS,
    label: '进行中',
    color: '#1890ff',
    bgColor: '#e6f7ff',
    icon: '▶️'
  },
  {
    value: TaskStatus.COMPLETED,
    label: '已完成',
    color: '#52c41a',
    bgColor: '#f6ffed',
    icon: '✅'
  }
] as const;

/**
 * 任务优先级选项配置
 */
export const TASK_PRIORITY_OPTIONS = [
  {
    value: TaskPriority.LOW,
    label: '低优先级',
    shortLabel: '低',
    color: '#87d068',
    bgColor: '#f6ffed',
    icon: '🟢',
    order: 1
  },
  {
    value: TaskPriority.MEDIUM,
    label: '中优先级',
    shortLabel: '中',
    color: '#108ee9',
    bgColor: '#e6f7ff',
    icon: '🔵',
    order: 2
  },
  {
    value: TaskPriority.HIGH,
    label: '高优先级',
    shortLabel: '高',
    color: '#f50',
    bgColor: '#fff2e8',
    icon: '🟠',
    order: 3
  },
  {
    value: TaskPriority.URGENT,
    label: '紧急',
    shortLabel: '紧急',
    color: '#ff4d4f',
    bgColor: '#fff1f0',
    icon: '🔴',
    order: 4
  }
] as const;

/**
 * 里程碑选项
 */
export const MILESTONE_OPTIONS = [
  'M0 - 项目启动',
  'M1 - 需求确认',
  'M1 - 技术选型',
  'M2 - 环境搭建',
  'M2 - 设计完成',
  'M3 - 核心功能',
  'M4 - 测试验收',
  'M5 - 上线发布'
] as const;

/**
 * 排序字段选项
 */
export const SORT_FIELD_OPTIONS = [
  { value: 'title', label: '标题' },
  { value: 'status', label: '状态' },
  { value: 'priority', label: '优先级' },
  { value: 'dueDate', label: '截止时间' },
  { value: 'createdAt', label: '创建时间' },
  { value: 'updatedAt', label: '更新时间' }
] as const;

/**
 * 默认分组配置
 */
export const DEFAULT_TASK_GROUPS = [
  {
    title: '待开始',
    color: '#f5f5f5',
    order: 0
  },
  {
    title: '进行中',
    color: '#1890ff',
    order: 1
  },
  {
    title: '已完成',
    color: '#52c41a',
    order: 2
  },
  {
    title: '待验收',
    color: '#faad14',
    order: 3
  }
] as const;

/**
 * 分组颜色选项
 */
export const GROUP_COLOR_OPTIONS = [
  '#f5f5f5', // 灰色
  '#1890ff', // 蓝色
  '#52c41a', // 绿色
  '#faad14', // 橙色
  '#f50',    // 红色
  '#722ed1', // 紫色
  '#13c2c2', // 青色
  '#eb2f96'  // 粉色
] as const;

/**
 * 日期格式常量
 */
export const DATE_FORMATS = {
  /** 标准日期格式 */
  STANDARD: 'YYYY-MM-DD',
  /** 日期时间格式 */
  DATETIME: 'YYYY-MM-DD HH:mm',
  /** 时间格式 */
  TIME: 'HH:mm',
  /** 月日格式 */
  MONTH_DAY: 'MM/DD',
  /** 中文日期格式 */
  CHINESE: 'YYYY年MM月DD日'
} as const;

/**
 * 拖拽相关常量
 */
export const DRAG_TYPES = {
  /** 任务卡片拖拽类型 */
  TASK_CARD: 'task-card',
  /** 分组拖拽类型 */
  TASK_GROUP: 'task-group'
} as const;

/**
 * 本地存储键名
 */
export const STORAGE_KEYS = {
  /** 项目筛选条件 */
  PROJECT_FILTERS: 'project_filters',
  /** 项目排序设置 */
  PROJECT_SORT: 'project_sort',
  /** 项目视图模式 */
  PROJECT_VIEW_MODE: 'project_view_mode',
  /** 用户偏好设置 */
  USER_PREFERENCES: 'user_preferences'
} as const;

/**
 * API 相关常量
 */
export const API_ENDPOINTS = {
  /** 项目列表 */
  PROJECTS: '/api/projects',
  /** 单个项目 */
  PROJECT: (id: string) => `/api/projects/${id}`,
  /** 任务操作 */
  TASKS: (projectId: string) => `/api/projects/${projectId}/tasks`,
  /** 单个任务 */
  TASK: (projectId: string, taskId: string) => `/api/projects/${projectId}/tasks/${taskId}`,
  /** 分组操作 */
  GROUPS: (projectId: string) => `/api/projects/${projectId}/groups`,
  /** 用户列表 */
  USERS: '/api/users'
} as const;

/**
 * 错误消息常量
 */
export const ERROR_MESSAGES = {
  /** 网络错误 */
  NETWORK_ERROR: '网络连接失败，请检查网络设置',
  /** 服务器错误 */
  SERVER_ERROR: '服务器错误，请稍后重试',
  /** 权限错误 */
  PERMISSION_ERROR: '权限不足，无法执行此操作',
  /** 数据验证错误 */
  VALIDATION_ERROR: '数据格式不正确，请检查输入',
  /** 任务不存在 */
  TASK_NOT_FOUND: '任务不存在或已被删除',
  /** 项目不存在 */
  PROJECT_NOT_FOUND: '项目不存在或已被删除'
} as const;

/**
 * 成功消息常量
 */
export const SUCCESS_MESSAGES = {
  /** 任务创建成功 */
  TASK_CREATED: '任务创建成功',
  /** 任务更新成功 */
  TASK_UPDATED: '任务更新成功',
  /** 任务删除成功 */
  TASK_DELETED: '任务删除成功',
  /** 任务复制成功 */
  TASK_COPIED: '任务复制成功',
  /** 分组创建成功 */
  GROUP_CREATED: '分组创建成功',
  /** 分组更新成功 */
  GROUP_UPDATED: '分组更新成功',
  /** 分组删除成功 */
  GROUP_DELETED: '分组删除成功'
} as const;

/**
 * 界面文本常量
 */
export const UI_TEXTS = {
  /** 按钮文本 */
  BUTTONS: {
    CONFIRM: '确认',
    CANCEL: '取消',
    SAVE: '保存',
    DELETE: '删除',
    EDIT: '编辑',
    CREATE: '创建',
    COPY: '复制',
    CLOSE: '关闭',
    RESET: '重置',
    SEARCH: '搜索',
    FILTER: '筛选',
    SORT: '排序'
  },
  /** 占位符文本 */
  PLACEHOLDERS: {
    SEARCH_TASKS: '搜索任务标题...',
    TASK_TITLE: '请输入任务标题',
    TASK_DESCRIPTION: '请输入任务描述（可选）',
    SELECT_ASSIGNEE: '请选择负责人',
    SELECT_PRIORITY: '请选择优先级',
    SELECT_STATUS: '请选择状态',
    SELECT_MILESTONE: '请选择里程碑'
  },
  /** 标签文本 */
  LABELS: {
    TASK_TITLE: '任务标题',
    TASK_DESCRIPTION: '任务描述',
    TASK_STATUS: '任务状态',
    TASK_PRIORITY: '优先级',
    ASSIGNEE: '负责人',
    CREATOR: '创建者',
    START_DATE: '开始时间',
    DUE_DATE: '截止时间',
    MILESTONE: '里程碑',
    TAGS: '标签',
    SUB_TASKS: '子任务',
    CARDS: '卡片',
    PROGRESS: '进度',
    CREATED_AT: '创建时间',
    UPDATED_AT: '更新时间'
  }
} as const;

/**
 * 验证规则常量
 */
export const VALIDATION_RULES = {
  /** 任务标题最大长度 */
  TASK_TITLE_MAX_LENGTH: 100,
  /** 任务描述最大长度 */
  TASK_DESCRIPTION_MAX_LENGTH: 500,
  /** 分组标题最大长度 */
  GROUP_TITLE_MAX_LENGTH: 50,
  /** 子任务标题最大长度 */
  SUB_TASK_TITLE_MAX_LENGTH: 100,
  /** 卡片标题最大长度 */
  CARD_TITLE_MAX_LENGTH: 100,
  /** 卡片内容最大长度 */
  CARD_CONTENT_MAX_LENGTH: 1000,
  /** 最大标签数量 */
  MAX_TAGS_COUNT: 10,
  /** 标签最大长度 */
  TAG_MAX_LENGTH: 20
} as const;

/**
 * 动画持续时间常量（毫秒）
 */
export const ANIMATION_DURATION = {
  /** 快速动画 */
  FAST: 200,
  /** 普通动画 */
  NORMAL: 300,
  /** 慢速动画 */
  SLOW: 500
} as const;

/**
 * 分页相关常量
 */
export const PAGINATION = {
  /** 默认页面大小 */
  DEFAULT_PAGE_SIZE: 20,
  /** 页面大小选项 */
  PAGE_SIZE_OPTIONS: [10, 20, 50, 100]
} as const;

